#ifndef _ZERO_INCLUDE_CXXSTD_H
#define _ZERO_INCLUDE_CXXSTD_H
namespace std
{
typedef void (*STDHANDLE)(void*);
void abort(void*) __attribute__((noreturn));
typedef unsigned int size_t;

// exception <([{
class exception
{
	public:
		exception() throw() {};
		virtual ~exception() throw();
		virtual const char* what() const throw();
};

class bad_exception : public exception
{
	public:
		bad_exception() throw() {};
		virtual ~bad_exception() throw();
		virtual const char* what() const throw();
};
// }])>

// typeinfo <([{
class type_info
{
	public:
		virtual ~type_info();

		bool operator==(const type_info& __arg) const { return __name == __arg.__name; }
		bool operator!=(const type_info& __arg) const { return !operator==(__arg); }

		virtual bool upCast(const type_info* exType) const;

		const char* name() const { return __name; }

	protected:
		const char* __name;

		explicit type_info(const char* __n);

	private:
		type_info& operator=(const type_info&);
		type_info(const type_info&);
};

class bad_cast : public exception
{
	public:
		bad_cast() throw();
		virtual ~bad_cast() throw();

		virtual const char* what() const throw();
};

class bad_typeid : public exception
{
	public:
		bad_typeid() throw();
		virtual ~bad_typeid() throw();

		virtual const char* what() const throw();
};
// }])>
} // namespace std

// new/delete <([{
namespace std
{
class bad_alloc : public exception
{
	public:
		bad_alloc() throw();
		virtual ~bad_alloc() throw();

		virtual const char* what() const throw();
};
} // namespace std

void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void*) throw();
void operator delete[](void*) throw();
// }])>
#endif
// vim: foldmarker=<([{,}])> foldmethod=marker
